type A = {
  a: string;
  b: number;
}

type B = {
  [K in keyof A]?: A[K]
}

type C = {
  [K in keyof B]-?: B[K]
}

type D = {
  readonly [K in keyof A]: A[K]
}

type E = {
  -readonly [K in keyof A]: A[K]
}
